package com.zhibang.config;

import com.mysql.cj.util.StringUtils;
import org.apache.shiro.authz.AuthorizationException;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.mgt.SessionContext;
import org.apache.shiro.session.mgt.SimpleSession;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.apache.shiro.web.util.WebUtils;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.Serializable;
import java.util.UUID;

/**
 * 自定义会话管理器
 */
public class MySessionManager extends DefaultWebSessionManager {
    private String token = null;

    // 是否将sessionID以Cookie写入到浏览器
    @Override
    public void setSessionIdCookieEnabled(boolean sessionIdCookieEnabled) {
        super.setSessionIdCookieEnabled(false);
    }

    @Override
    protected Serializable getSessionId(ServletRequest request, ServletResponse response) {
        /**
         * 从请求中获取sessionID
         * 如果请求中没有携带token请求头 自己随机一个会话id
         * 如果携带了 就以携带的token作为会话id
          */
        token = WebUtils.toHttp(request).getHeader("token");
        if(StringUtils.isNullOrEmpty(token)){
            token = UUID.randomUUID().toString();
        }
        return token;
    }

    @Override
    protected Session createSession(SessionContext context) throws AuthorizationException {
        /**
         * 修改会话创建方式
          */
        SimpleSession ss = new SimpleSession();
        ss.setId(token);
        return ss;
    }
}
